\section{Интефейс платформенного ядра}

Платформенное ядро с помощью своих типов и своего интерфейса может влиять на
сборку переносимого ядра. Собранное переносимое ядро уже становится завязанным
на платформу и готовым для подключения к платформенному ядру.

\subsection{Типы платформенного ядра}

Платформенное ядро определяет типы id\_t, size\_t, timeout\_t, используемые в
API. Адресные типы laddr\_t, paddr\_t. Временн\'{ы}е типы clock\_t, timeout\_t.
Размерные типы size\_t, sizex\_t, И тип для блокировок lock\_t;

\subsection{Макросы}

Платформенное ядро определяет дефайны \_\_init\_\_ и \_\_initdata\_\_, которые
служат для обозначения инициализационного кода и данных.

Платформенное ядро так же определяет дефайны \_\_unused\_\_, который может быть
использован после аргументов функций, чтобы задекларировать их неиспользуемость,
и дефайн \_\_deprecated\_\_, который служит для определения устаревших функций.

\subsection{Управление памятью}

Если платформенное ядро написано не на C++, то оно обязано поддерживать
стандартные минимальный объем C++ рантайма для нормального функционирования Core.

\subsection{Вводо/Вывод}

Для вводо-вывода платформенное ядро предоставляет весьма скромные возможности,
но более широкие возможности в частности вывода реализуются универсально и будут
реализованы в переносимом ядра. Функции void~StubPrintChar~(const~int~c); int~StubGetChar~(void); обеспечивают вывод и ввод одного символа соответственно.

\subsection{Блокировки}

void StubLock (lock\_t * const lock);
void StubUnlock (lock\_t * const lock);

\subsection{Прочее}

clock\_t~StubClockCount~(void); - Возвращает количество тактов CPU, Если же не
сушествует возможности получить счетчики процессорных тактов - то это должен
быть просто инкрементальный счетчик\footnote{Получается то-то вроде эмуляции.}.

tick\_t StubTickCount(); - Счетчик квантования системы. Не является источником
точного времени.

\subsection{Отладочные возможности}

Платформенное ядро предоставляет несколько отладочных макросов.

STUB\_FATAL(msg) - Неразрешимая ситуация, происходит вывод сообщения и остановка
системы.

STUB\_ASSERT(exp, msg) - Проверка утверждений в момент выполнения. В
окончательной версии будут выключены.

STATIC\_ASSERT(exp) - Проверка утверждений на этапе компиляции. В силу природы
данного макроса, он может проверять только известные на этапе компиляции
выражения. Размеры структур, значения констант.

Возможно в дальнейшем появятся какие-то утверждения, которые будут включаться в
окончательную версию, но пока в таких утверждениях необходимости не
обнаруживается.

Кроме того платформенное ядро предоставляет функцию StubSoD (const char *msg,
const char *file, int line); Но пользоваться ей непосредственно не следует,
в этом нет никакой необходимости.
